package wei.qiang.ye.feignconsumer.service;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;
import wei.qiang.ye.feignconsumer.domain.User;

import java.util.List;

@FeignClient(value = "Server-Provider", fallback = UserServiceFallback.class) //通过@FeignClient("Server-Provider")注解来获取我们需要的其他服务，其中Server-Provider不区分大小写
public interface UserService {

    /**
     * 需要注意的是，在定义各参数绑定时，@RequestParam、@RequestHeader等可 以指定参数名称的注解，
     * 它们的value千万不能少。在SpringMVC 程序中，这些注解会根据参数名来作为默认值，
     * 但是在Feign中绑定参数必须通过value属性来指明具体的参数名，
     * 不然会抛出illegalStateException异常，value 属性不能为空。
     */

    /**
     *
     * @param id
     * @return
     */
    @GetMapping("user/{id}")
    public User get(@PathVariable("id") Long id);

    @GetMapping("user")
    public List<User> get();

    @PostMapping("user")
    public void add(@RequestBody User user);

    @PutMapping("user")
    public void update(@RequestBody User user);

    @DeleteMapping("user/{id}")
    public void delete(@PathVariable("id") Long id);
}
